/**
 * 生成随机字符串
 * @param length 字符串长度
 * @returns 随机字符串
 */
function generateRandomString(length: number): string {
  const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  let result = '';
  for (let i = 0; i < length; i++) {
    result += chars.charAt(Math.floor(Math.random() * chars.length));
  }
  return result;
}

/**
 * 生成URL友好的18位随机字符串slug
 * @returns 生成的slug
 */
function generateRandomSlug(): string {
  return generateRandomString(18);
}

/**
 * 从标题生成URL友好的slug
 * @param title 标题
 * @returns 生成的slug
 */
export function generateSlug(title: string): string {
  return title
    .toLowerCase()
    .trim()
    .replace(/[^\w\s-]/g, '') // 移除特殊字符
    .replace(/[\s_-]+/g, '-') // 将空格、下划线、连字符替换为单个连字符
    .replace(/^-+|-+$/g, ''); // 移除开头和结尾的连字符
}

/**
 * 生成唯一的slug
 * @param existingSlugs 已存在的slug列表
 * @returns 唯一的slug
 */
export function generateUniqueSlug(
  existingSlugs: string[] = []
): string {
  let slug = generateRandomSlug();
  
  // 如果slug已存在，重新生成，直到不重复
  while (existingSlugs.includes(slug)) {
    slug = generateRandomSlug();
  }
  
  return slug;
}

/**
 * 从现有slug生成新的slug（用于更新文章时）
 * @param existingSlug 现有slug
 * @param date 日期（可选）
 * @returns 新的slug
 */
export function generateNewSlugFromExisting(existingSlug: string, date?: Date): string {
  const now = date || new Date();
  const year = now.getFullYear();
  const month = String(now.getMonth() + 1).padStart(2, '0');
  const day = String(now.getDate()).padStart(2, '0');
  const hour = String(now.getHours()).padStart(2, '0');
  const minute = String(now.getMinutes()).padStart(2, '0');
  const second = String(now.getSeconds()).padStart(2, '0');
  
  // 生成4位随机字符串
  const randomStr = generateRandomString(4);
  
  // 格式：年月日时分秒-随机字符串
  return `${year}${month}${day}${hour}${minute}${second}-${randomStr}`;
} 